import { defineConfig, loadEnv } from 'vite'
import uniModule from '@dcloudio/vite-plugin-uni'
import path from 'node:path'
// uni-helper 系列插件
// @see https://uni-helper.js.org/vite-plugin-uni-pages
import UniPages from '@uni-helper/vite-plugin-uni-pages'
// @see https://uni-helper.js.org/vite-plugin-uni-layouts
import UniLayouts from '@uni-helper/vite-plugin-uni-layouts'
// 需要与 @uni-helper/vite-plugin-uni-pages 插件一起使用
import UniPlatform from '@uni-helper/vite-plugin-uni-platform'
// @see https://github.com/uni-helper/vite-plugin-uni-manifest
import UniManifest from '@uni-helper/vite-plugin-uni-manifest'
// 自动导入
import AutoImport from 'unplugin-auto-import/vite'
// 热重启
import ViteRestart from 'vite-plugin-restart'
// UnoCSS 插件，用于原子化 CSS
import UnoCSS from 'unocss/vite'
// @ts-expect-error missing types
const Uni = uniModule.default || uniModule
export default defineConfig(({ command, mode }) => {
    // mode: 区分生产环境还是开发环境
    console.log('command, mode -> ', command, mode)
    const { UNI_PLATFORM } = process.env
    console.log('UNI_PLATFORM -> ', UNI_PLATFORM)
    // 得到 mp-weixin, h5, app 等
    // pnpm dev:h5 时得到 => serve development
    // pnpm build:h5 时得到 => build production
    // pnpm dev:mp-weixin 时得到 => build development (注意区别，command为build)
    // pnpm build:mp-weixin 时得到 => build production
    // pnpm dev:app 时得到 => build development (注意区别，command为build)
    // pnpm build:app 时得到 => build production
    // dev 和 build 命令可以分别使用 .env.development 和 .env.production 的环境变量
    const env = loadEnv(mode, path.resolve(process.cwd(), 'env'))
    console.log('环境变量 env -> ', env)
    const {
        VITE_APP_PORT,
        VITE_SERVER_BASEURL,
        VITE_DELETE_CONSOLE,
        VITE_SHOW_SOURCEMAP,
        VITE_APP_PROXY,
        VITE_APP_PROXY_PREFIX
    } = env
    return {
        envDir: './env', // 自定义env目录
        plugins: [
            UniPages({
                exclude: ['**/components/**/**.*'],
                routeBlockLang: 'json5', // 虽然设了默认值，但是vue文件还是要加上 lang="json5", 这样才能很好地格式化
                // homePage 通过 vue 文件的 route-block 的type="home"来设定
                // pages 目录为 src/pages，分包目录不能配置在pages目录下
                // subPackages: ['src/pages-sub'], // 是个数组，可以配置多个，但是不能为pages里面的目录
                dts: 'src/types/uni-pages.d.ts'
            }),
            UniLayouts(),
            UniPlatform(),
            UniManifest(),
            // UniXXX 需要在 Uni 之前引入
            Uni(),
            {
                // 临时解决 dcloudio 官方的 @dcloudio/uni-mp-compiler 出现的编译 BUG
                // 参考 github issue: https://github.com/dcloudio/uni-app/issues/4952
                // 自定义插件禁用 vite:vue 插件的 devToolsEnabled，强制编译 vue 模板时 inline 为 true
                name: 'fix-vite-plugin-vue',
                configResolved(config) {
                    const plugin = config.plugins.find(p => p.name === 'vite:vue')
                    if (plugin && plugin.api && plugin.api.options) {
                        plugin.api.options.devToolsEnabled = false
                    }
                }
            },
            /// css 预处理器
            UnoCSS(),
            /// 自动导入 配置
            AutoImport({
                imports: ['vue', 'uni-app', 'pinia'],
                dts: 'src/types/auto-import.d.ts',
                dirs: ['src/hooks'], // 自动导入 hooks
                eslintrc: { enabled: true },
                vueTemplate: true // default false
            }),
            /// 热重启
            ViteRestart({
                // 通过这个插件，在修改vite.config.js文件则不需要重新运行也生效配置
                restart: ['vite.config.ts']
            })
        ]
    }
})
